package com.iuie.ns.datum.mapper;

import java.util.Date;
import java.util.List;

import org.apache.ibatis.annotations.Param;

import com.iuie.ns.datum.vo.MthInstalmentDetailVO;
import com.iuie.ns.datum.vo.UserExpenseInfoVO;
import com.iuie.ns.datum.vo.UserExpenseInstalmentInfoVO;
import com.iuie.ns.frame.persistence.annotations.MyBatisRepository;

@MyBatisRepository
public interface UserExpenseInstalmentInfoMapper {
	
	/**
	 * 根据消费记录Id删除消费分期记录
	 * @param expenseId
	 * @return
	 * @date 2018年4月7日下午10:26:49
	 */
	Integer deleteByExpenseId(@Param("expenseId") String expenseId);

	/**
	 * 新增单条记录
	 * @param item
	 */
	void addOne(@Param("item") UserExpenseInstalmentInfoVO item);

	/**
	 * 根据ID删除单条记录
	 * @param id
	 * @param expenseId
	 */
	Integer deleteById(@Param("id") String id, @Param("expenseId") String expenseId);

	/**
	 * 更新单条记录
	 * @param item
	 */
	void updateOne(@Param("item") UserExpenseInstalmentInfoVO item);

	/**
	 * 批量保存分期详情
	 * @param records
	 * @date 2018年4月22日下午12:25:20
	 */
	void batchAddInstalmentRepayDetail(@Param("records") List<UserExpenseInstalmentInfoVO> records);

	/**
	 * 根据消费ID查询所有分期信息
	 * @param expenseId
	 * @return
	 * @date 2018年4月22日下午3:47:40
	 */
	List<UserExpenseInstalmentInfoVO> findAllInstalmentDetails(@Param("expenseId") String expenseId);

	/**
	 * 更新还款金额
	 * @param id
	 * @param repayAmount
	 * @param updateTime
	 * @return
	 * @date 2018年4月22日下午5:16:00
	 */
	Integer updateRepayAmount(@Param("id") String id, @Param("repayAmount") Double repayAmount, @Param("updateTime") Date updateTime);

	/**
	 * 更新备注
	 * @param id
	 * @param remark
	 * @param date
	 * @date 2018年4月22日下午5:45:57
	 */
	void updateRemark(@Param("id") String id, @Param("remark") String remark, @Param("updateTime") Date updateTime);

	/**
	 * 更新还款状态
	 * @param id
	 * @param isRepay
	 * @param updateTime 
	 * @param realRepayDate 实际还款时间 
	 * @date 2018年4月22日下午5:58:01
	 */
	void updateRepayState(@Param("id") String id, @Param("isRepay") String isRepay, @Param("updateTime") Date updateTime, @Param("realRepayDate") Date realRepayDate);

	/**
	 * 查询当月消费总额
	 * @param condition
	 * @return
	 * @date 2018年4月30日下午2:26:17
	 */
	Double findSumConsumeAmount(@Param("item") UserExpenseInfoVO condition);

	/**
	 * 查询当月分期金额信息，需要关注的条件：消费时间，若消费时间为空，则查询出所有未还 or 已还
	 * @param condition
	 * @param isRepay 01: 已还，02: 未还
	 * @return
	 * @date 2018年4月30日下午2:40:23
	 */
	Double findMthInstalmentAmount(@Param("item") UserExpenseInfoVO condition, @Param("isRepay") String isRepay);
	
	/**
	 * 更新实际还款日
	 * @param id
	 * @param realRepayDate
	 * @param updateTime
	 * @return
	 * @date 2018年4月30日下午4:14:14
	 */
	Integer updateRealRepayDate(@Param("id") String id, @Param("realRepayDate") Date realRepayDate, @Param("updateTime") Date updateTime);

	/**
	 * 查询最近两个月的分期详情
	 * @param condition
	 * @param date
	 * @return
	 * @date 2018年4月30日下午5:36:19
	 */
	List<MthInstalmentDetailVO> findMthInstalmentDetailByCondition(@Param("condition") MthInstalmentDetailVO condition, @Param("date") String date);
	
	/**
	 * 根据ID查询用户分期信息
	 * @param id
	 * @return
	 * @author iuie
	 * @date 2018年6月9日 下午8:50:12
	 */
	UserExpenseInstalmentInfoVO findById(@Param("id") String id);

}